const express = require('express')
const db = require('../database/index')
 
// 获取评论列表
exports.getcomment = (req, res) => {

    console.log('请求:获取所有评论列表')

    const sql = `
        SELECT 
            c.CommentID,
            c.CommentContent, 
            DATE_FORMAT(c.Comment_Date, '%Y-%m-%d %H:%i:%s') AS Comment_Date, 
            c.Com_UserID, 
            c.Com_PostID,
            u.UserName,
            p.PostTitle 
        FROM comment c 
        LEFT JOIN user u ON c.Com_UserID = u.UserID 
        LEFT JOIN post p ON c.Com_PostID = p.PostID`;

    db.query(sql, (err, results) => {

        // sql执行失败
        if (err) return res.send({ status: 1, message: 'sql执行失败' });

        //该博客没有评论 
        if (results.length === 0) return res.send({ status: 1, message: '评论数为0' });

        // 获取成功
        res.send({
            status: 0,
            message: '获取评论成功',
            data: results
        })
    })
}

//根据用户id查询评论
exports.getcommentbyuserid = (req, res) => {

    console.log('请求:根据用户id查询评论')

    // 定义查询评论的 SQL 语句
    const sql = `
                SELECT c.CommentID, 
                c.CommentContent, 
                DATE_FORMAT(c.Comment_Date, '%Y-%m-%d %H:%i:%s') Comment_Date, 
                c.Com_UserID, 
                c.Com_PostID,
                p.PostTitle
                FROM comment c
                JOIN user u ON c.Com_UserID = u.UserID
                JOIN post p ON c.Com_PostID = p.PostID
                WHERE u.UserID = ?
                 `;

    // 执行 SQL 查询  通过token获取登录用户的id
    db.query(sql, [req.user.UserID], (err, results) => {

        // sql执行失败
        if (err) return res.send({ status: 1, message: '查询失败' })

        //该用户没有评论 
        if (results.length === 0) return res.send({ status: 1, message: '评论数为0' });

        // 如果查询成功，返回查询结果
        res.send({ status: 0, message: '根据用户ID获取评论成功', data: results });
    });
}

//根据博客id查询评论 
exports.getcommentbypostid = (req, res) => {

    console.log('请求:根据博客id查询评论')
    //  SQL 语句
    const sql = `SELECT c.CommentID, 
                c.CommentContent,
                DATE_FORMAT(c.Comment_Date, '%Y-%m-%d %H:%i:%s') Comment_Date,
                c.Com_UserID, c.Com_PostID,u.userName
                FROM comment c
                JOIN post p ON c.Com_PostID = p.PostID
                JOIN user u ON c.Com_UserID = u.UserID
                WHERE p.PostID = ?`;

    // 执行 SQL 查询
    db.query(sql, [req.params.id], (err, results) => {
        // sql执行失败
        if (err) return res.send({ status: 1, message: '查询失败' });
        // 该博客没有评论
        if (results.length === 0) return res.send({ status: 1, message: '评论数为0' });
        // 如果查询成功，返回查询结果
        res.send({ status: 0, message: '根据博客ID获取评论成功', data: results });
    });
}

//删除评论
exports.delcomment = (req, res) => {

    console.log('请求:删除评论')

    const sql = 'DELETE FROM comment WHERE CommentID=?'

    db.query(sql, [req.params.id], (err, results) => {

        // sql执行失败
        if (err) return res.send({ status: 1, message: '查询失败' });

        // 没有删除成功
        if (results.affectedRows === 0) return res.send({ status: 1, message: '删除失败' });

        // 如果查询成功，返回查询结果
        res.send({ status: 0, message: '删除成功'});

    })

}

//发表评论
exports.addcomment = (req, res) => {
    console.log('请求:发表评论')

    console.log(req.body)
    if (!req.body.commentContent) {
        return res.send({ status: 1, message: '评论内容无法为空' })
    }
    // 定义插入评论的 SQL 语句
    const sql = `INSERT INTO comment 
    (CommentContent, Com_UserID, Com_PostID) VALUES (?, ?, ?)`;

    // 执行 SQL 查询
    db.query(sql, [req.body.commentContent, req.user.UserID, req.params.id], (err, results) => {
        // sql执行失败
        if (err) return res.send({ status: 1, message: 'sql执行失败' });
        // 插入失败
        if (results.affectedRows === 0) return res.send({ status: 1, message: '插入失败' });
        // 返回成功响应
        res.send({status: 0,message: '评论发表成功',});
    });
};

// 获取评论数
exports.getcommentnum = (req, res) => {
    
    console.log('请求:获取评论数')
    // 定义SQL语句
    const sql = `SELECT p.PostID, p.PostTitle, 
                COUNT(c.CommentID) Post_CommentNum 
                FROM post p 
                LEFT JOIN comment c ON p.PostID = c.Com_PostID 
                GROUP BY p.PostID, p.PostTitle`;
    // 执行SQL语句
    db.query(sql, (err, results) => {
        // sql执行失败
        if (err) return res.send({ status: 1, message: 'sql执行失败' });
        // 返回评论数结果
        res.send({ status: 0, message: '获取评论数成功', data: results });
    });
};

// 根据用户id获取评论数
exports.getcommentnumbyuserid = (req, res) => {

    console.log('请求:根据用户id获取评论数')

    // 定义查询评论数量的 SQL 语句
    const sql = 'SELECT COUNT(*) AS commentCount FROM comment WHERE Com_UserID = ?';


    db.query(sql, [req.user.UserID], (err, results) => {

        // sql执行失败
        if (err) return res.send({ status: 1, message: 'sql执行失败' });

        // 插入失败
        if (results.length === 0) return res.send({ status: 1, message: '该用户发表评论数为0' });

        // 返回成功响应
        const commentCount = results[0]?.commentCount || 0;

        res.send({
            status: 0,
            message: '根据用户id获取评论数成功',
            data: commentCount
        });

    });

};

// 根据帖子id获取评论数
exports.getcommentnumbypostid = (req, res) => {
    
    console.log('请求:根据帖子id获取评论数')

    // 定义查询评论数量的 SQL 语句
    const sql = 'SELECT COUNT(*) AS commentCount FROM comment WHERE Com_PostID = ?';

    // 执行 SQL 查询
    db.query(sql, [req.params.id], (err, results) => {

        // sql执行失败
        if (err) return res.send({ status: 1, message: 'sql执行失败' });

        // 查询失败
        if (results.length === 0) return res.send({ status: 1, message: '该博客评论数为0' });

        // 返回成功响应
        const commentCount = results[0]?.commentCount || 0;

        res.send({
            status: 0,
            message: '根据帖子id获取评论数成功',
            data: commentCount
        });

    })
}
